Processes, Processの登録
registerProcesses を経由して processesDefinition から動的にProcess関数がリモートプラグインの関数としてneovimに登録される 関数名は createProcessFunctionName で一意に生成され、コマンドの定義( commandDefinition )と紐付いている
具体的なコードは以下
code:process/index.ts
export type ProcessesDefinition = Array<{
name: ProcessesName
processes: Processes
}>
export const processesDefinition: ProcessesDefinition = [
{
name: "open-file",
processes: openFileProcesses,
},
{
name: "register",
processes: registerProcesses,
},
{
name: "open-pr",
processes: openPrProcesses,
},
...
]
code:process/process.ts
export const createProcessFunctionName = (processesName: ProcessesName, expectKey: string): string =>
camelCase(fzf-preview-${processesName}-${expectKey}, { pascalCase: true })
export const createProcess: CreateProcess = (processesName) => (expectKey, lineConsumer) => ({
name: createProcessFunctionName(processesName, expectKey),
key: expectKey,
execute: async (lines) => {
if (lineConsumer.kind === "single") {
for (const line of lines) {
// eslint-disable-next-line no-await-in-loop
await lineConsumer.consume(line)
}
} else {
await lineConsumer.consume(lines)
}
},
})
code:process/open-file.ts
const createOpenFileProcess = createProcess("open-file")
export const openFileProcesses: Processes = [
createOpenFileProcess("enter", editConsumer),
createOpenFileProcess("ctrl-x", splitConsumer),
createOpenFileProcess("ctrl-v", vsplitConsumer),
createOpenFileProcess("ctrl-t", tabeditConsumer),
createOpenFileProcess("ctrl-o", dropConsumer),
createOpenFileProcess("ctrl-q", exportQuickfixConsumer),
]
code:register/process.ts
export const registerProcesses = (): void => {
processesDefinition.forEach(({ processes }) => {
processes.forEach((process) => {
pluginRegisterFunction(
process.name,
async (lines: ConvertedLines) => {
...
await process.execute(lines)
},
{ sync: false }
)
})
})
}
例えば open-file については以下の関数がneovimに登録される
code:rplugin.vim
{'sync': v:false, 'name': 'FzfPreviewOpenFileEnter', 'type': 'function', 'opts': {}},
{'sync': v:false, 'name': 'FzfPreviewOpenFileCtrlX', 'type': 'function', 'opts': {}},
{'sync': v:false, 'name': 'FzfPreviewOpenFileCtrlV', 'type': 'function', 'opts': {}},
{'sync': v:false, 'name': 'FzfPreviewOpenFileCtrlT', 'type': 'function', 'opts': {}},
{'sync': v:false, 'name': 'FzfPreviewOpenFileCtrlO', 'type': 'function', 'opts': {}},
{'sync': v:false, 'name': 'FzfPreviewOpenFileCtrlQ', 'type': 'function', 'opts': {}},